#ifndef __VAKJE_H__ 
#define __VAKJE_H__

#include "Serializable.h"

//
/*************************************************************/
//
//	Basisklasse van een vakje. 
//	Author: Maarten Lambert, Kenneth Venken
//
/*************************************************************/

class Robot;
 
class Vakje : public Serializable
{
public:
	Vakje() {};
	virtual ~Vakje(){}

	/*
		 heeft vorm XX waarbij X een char is:
			AA voor afgrond
			Cx voor checkpoint waarbij x: 1, 2, 3 is
			Lo voor Laser waarbij o de orientatie is ( 0, 1, 2, 3 )
			MM voor muur
			RR voor reparatievak
			VV voor vloer
			DD voor drain
			SS voor startpositie

			aangezien de map enkel in het begin verstuurd wordt, is het niet erg dat er voor sommige typen te veel tekens gebruikt worden.
	*/
	virtual string serialize() const = 0;
	//! We gebruiken de static create functie om te unserializen
	bool unserialize(const string& ){ return false; }

	//! Maakt een vakje aan afhankelijk van type en argument -> wordt gebruikt door unserialize
	static Vakje* create( char type, char arg );

	//! kan er een robot op het vak geplaatst worden?
	virtual bool isObstakel() const = 0;

	//! de robot is op het vak geplaatst, pas robot aan. 
	virtual void pasSchadeAan(Robot* robot) const {};

	//! deze wordt opgeroepen enkel en alleen als de robot op dit vakje eindigt
	virtual void pasToestandAan(Robot* robot) const {};


};

#endif
